"""
给定01数组，每次选择一个位置i，将[i, N]全部翻转
问使得全1的最少操作次数
从位置1开始，依次处理过去即可
注意到两次翻转回到原样，因此可以使用计数器数组来决定最终元素
计数器数组需要成段增加，因此维护计数器的差分数组即可
而真正的计数器直接累加即可
"""
from typing import List
class Solution:
    def minOperations(self, nums: List[int]) -> int:
        n = len(nums)
        c = [0 for i in range(n + 1)]
        s = 0
        ans = 0
        for i in range(n):
            if nums[i] == s % 2:
                c[i] += 1
                c[n] -= 1
                ans += 1
            s += c[i]
        return ans
        